import lista.TElemento;
import lista.IElemento;
import lista.TLista;
import lista.ILista;


public class TCaminos {
	public TLista caminos;
	
	public TCaminos() {
		caminos = new TLista();
	}
	
	public boolean agregarCamino (TCamino unCamino){
		int etiquetaCamino = unCamino.obtenerCostoTotal();
		IElemento elementoCamino = new TElemento (etiquetaCamino, unCamino.copiaCamino());
		boolean insertado = caminos.insertarAlFinal(elementoCamino);
		return insertado;
	}
	
	@SuppressWarnings({ "rawtypes" })
	public Comparable[] obtenerCamino (int idx) {
		int cantidadCaminos = caminos.obtenerCantidadElementos();
		if ((idx > cantidadCaminos) || (idx <= 0)) return null;
		else {
			IElemento camino = caminos.primero;
			int posicion = 1;
			while (posicion < idx){
				camino = camino.getSiguiente();
				posicion++;
			}
			TCamino buscado = (TCamino) camino.getDatos();
			TVertice origen = buscado.origen;
			ILista adyacencias = buscado.adyacencias;
			IElemento adyacente = adyacencias.obtenerPrimero();
			Comparable[] caminoBuscado = new Comparable[(adyacencias.obtenerCantidadElementos() + 1)];
			caminoBuscado[0] = origen.etiqueta;
			posicion = 1;
			while (adyacente != null){
				caminoBuscado[posicion] = adyacente.getEtiqueta();
				adyacente = adyacente.getSiguiente();
				posicion++;
			}
			
			return caminoBuscado;
		}
	}
	
}
